#include <errno.h>
#include <fcntl.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#define BUF_MAX_SIZE 8192

int main(){
    puts("start!");
    int pipefd[2];
    int flag = 0;
    int n;
    char buf[BUF_MAX_SIZE];
    memset(buf, 0, BUF_MAX_SIZE);
    pipe(pipefd);
    int count = 0;
    //close(pipefd[0]);
    int flags = fcntl(pipefd[1], F_GETFL);
// 管道默认是阻塞写，通过`fcntl`设置成非阻塞写，在管道满无法继续写入时返回-EAGAIN，作为循环终止条件
    fcntl(pipefd[1], F_SETFL, flags | O_NONBLOCK);
    // 写入管道
    while (!flag)
    {
        n = write(pipefd[1], buf, 1);
        if (n == -1)
        {
            flag = 1;
        }
        else
        {
            count++;
        }
    }
    int space = count / 1024;
    //printf("space = %dKB\n", count/ 1024);
    char tmp[10];
    sprintf(tmp, "%d", space);
    puts("end!");
    puts(tmp);
    return 0;
}